#include <iostream>

using std::cout;
using std::endl;

int add(int x, int y)
{
    return x + y;
}

int multiply(int x, int y)
{
    return x * y;
}


class Foo
{
public:
    int add(int x, int y)
    {
        return x + y;
    }

    int multiply(int x, int y)
    {
        return x * y;
    }
};

//将函数称为函数类型
//int(int,int)


//成员函数指针指向的是一个成员函数(了解)
void test1()
{
    int a = 3, b = 4;
    //Foo类型的成员函数指针指向Foo的add函数
    int (Foo::*p)(int,int) = &Foo::add;
    Foo foo;//成员函数指针要依赖于一个对象进行调用
    cout << (foo.*p)(a, b) << endl;

    //当用指向一个对象的指针，调用成员函数指针时的用法
    Foo *fp = &foo;
    cout << (fp->*p)(a, b) << endl;
}

void test0()
{
    int a = 3, b = 4;
    //定义了一个函数指针
    int (*p)(int,int) = add;
    p(a, b);
    (*p)(a, b);

    p = multiply;
    p(a, b);
}


int main()
{
    test1();
    return 0;
}

